/**
 * 日期处理工具类
 */

/**
 * 格式化日期为 yyyy-mm-dd 格式
 * @param {string|Date} dateString - 日期字符串或Date对象
 * @returns {string} 格式化后的日期字符串 yyyy-mm-dd
 */
export function formatDate(dateString) {
  if (!dateString) return '';
  
  try {
    const date = new Date(dateString);
    // 检查日期是否有效
    if (isNaN(date.getTime())) {
      console.warn('无效的日期格式:', dateString);
      return dateString;
    }
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
  } catch (error) {
    console.error('日期格式化失败:', error);
    return dateString; // 如果格式化失败，返回原始值
  }
}

/**
 * 格式化日期时间为 yyyy-mm-dd hh:mm:ss 格式
 * @param {string|Date} dateString - 日期字符串或Date对象
 * @returns {string} 格式化后的日期时间字符串 yyyy-mm-dd hh:mm:ss
 */
export function formatDateTime(dateString) {
  if (!dateString) return '';
  
  try {
    const date = new Date(dateString);
    if (isNaN(date.getTime())) {
      console.warn('无效的日期格式:', dateString);
      return dateString;
    }
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  } catch (error) {
    console.error('日期时间格式化失败:', error);
    return dateString;
  }
}

/**
 * 格式化时间为 hh:mm:ss 格式
 * @param {string|Date} dateString - 日期字符串或Date对象
 * @returns {string} 格式化后的时间字符串 hh:mm:ss
 */
export function formatTime(dateString) {
  if (!dateString) return '';
  
  try {
    const date = new Date(dateString);
    if (isNaN(date.getTime())) {
      console.warn('无效的日期格式:', dateString);
      return dateString;
    }
    
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    
    return `${hours}:${minutes}:${seconds}`;
  } catch (error) {
    console.error('时间格式化失败:', error);
    return dateString;
  }
}

/**
 * 格式化为中文日期格式 yyyy年mm月dd日
 * @param {string|Date} dateString - 日期字符串或Date对象
 * @returns {string} 格式化后的中文日期字符串
 */
export function formatDateChinese(dateString) {
  if (!dateString) return '';
  
  try {
    const date = new Date(dateString);
    if (isNaN(date.getTime())) {
      console.warn('无效的日期格式:', dateString);
      return dateString;
    }
    
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    
    return `${year}年${month}月${day}日`;
  } catch (error) {
    console.error('中文日期格式化失败:', error);
    return dateString;
  }
}

/**
 * 获取当前日期的 yyyy-mm-dd 格式
 * @returns {string} 当前日期 yyyy-mm-dd
 */
export function getCurrentDate() {
  return formatDate(new Date());
}

/**
 * 获取当前日期时间的 yyyy-mm-dd hh:mm:ss 格式
 * @returns {string} 当前日期时间 yyyy-mm-dd hh:mm:ss
 */
export function getCurrentDateTime() {
  return formatDateTime(new Date());
}

/**
 * 计算两个日期之间的天数差
 * @param {string|Date} startDate - 开始日期
 * @param {string|Date} endDate - 结束日期
 * @returns {number} 天数差
 */
export function getDaysDifference(startDate, endDate) {
  try {
    const start = new Date(startDate);
    const end = new Date(endDate);
    
    if (isNaN(start.getTime()) || isNaN(end.getTime())) {
      console.warn('无效的日期格式');
      return 0;
    }
    
    const timeDiff = Math.abs(end.getTime() - start.getTime());
    return Math.ceil(timeDiff / (1000 * 3600 * 24));
  } catch (error) {
    console.error('计算日期差失败:', error);
    return 0;
  }
}